package entretenimiento.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import entretenimiento.excepcion.DAOExcepcion;
import entretenimiento.modelo.Juego;

import entretenimiento.util.ConexionBD;

public class JuegoDAO extends BaseDAO{

	public Juego insertar(Juego objJuego) throws DAOExcepcion {
		String query = "insert into juego(nombre, descripcion, materiales, imagen, costopersona) values (?,?,?,?,?)";
	Connection con = null;
	PreparedStatement stmt = null;
	ResultSet rs = null;
	
	try {
		con = ConexionBD.obtenerConexion();
		stmt = con.prepareStatement(query);
		stmt.setString(1, objJuego.getNombre());
		stmt.setString(2, objJuego.getDescripcion());
		stmt.setString(3, objJuego.getMaterial());
		stmt.setString(4, objJuego.getImagen());
		stmt.setFloat(5, objJuego.getCostopersona());
		
		
		int i = stmt.executeUpdate();
		if (i != 1) {
			throw new SQLException("No se pudo insertar");
		}
		// Obtener el ultimo id
		int id = 0;
		query = "select last_insert_id()";
		stmt = con.prepareStatement(query);
		rs = stmt.executeQuery();
		if (rs.next()) {
			id = rs.getInt(1);
		}
		objJuego.setIdjuego(id);
		
		//setCodigoUsu(objUsuario.getCodigo());
		
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	
		return objJuego;
	}
	
	public void ValidarDatosIncompletos(String nombre, String descripcion, String material, String imagen,
			float costopersona) throws DAOExcepcion {
			
			String msg = "";
			
			try {
			if (nombre == null || nombre.isEmpty())
			msg = "Los Nombres no pueden ser vacio o nulo, Favor de Ingresarlo";
			if (descripcion == null || descripcion.isEmpty())
			msg += "\nEl descripcion no puede ser vacio o nulo, Favor de Ingresarlo";
			if (material == null || material.isEmpty())
			msg += "\nEl material no puede ser vacio o nulo, Favor de Ingresarlo";
			
			if (imagen == null || imagen.isEmpty())
			msg += "\nEl imagen no puede ser vacio o nulo, Favor de Ingresarlo";
			
			//String numCadena= String.valueOf(costopersona);
			
			if(String.valueOf(costopersona) == null || String.valueOf(costopersona).isEmpty())
				msg += "\nEl costopersona no puede ser vacio o nulo, Favor de Ingresarlo";
			
			
			if (! msg.isEmpty())
			throw new SQLException(msg);
			
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			}
	}

	public Collection<Juego> listar() throws DAOExcepcion {
		Collection<Juego> c = new ArrayList<Juego>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "select  idjuego, nombre, descripcion, materiales, imagen, costopersona, estado from juego where estado = 1;";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Juego vo = new Juego();
				vo.setIdjuego(rs.getInt("idjuego"));
				vo.setNombre(rs.getString("nombre"));
				vo.setDescripcion(rs.getString("descripcion"));
				vo.setMaterial(rs.getString("materiales"));
				vo.setImagen(rs.getString("imagen"));
				vo.setCostopersona(rs.getFloat("costopersona"));
				vo.setEstado(rs.getString("estado"));

				c.add(vo);
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}

	public Juego actualizar(Juego vo) throws DAOExcepcion {
		String query = "update juego set nombre=?,descripcion=?,materiales=?,imagen=?,costopersona=? where idjuego=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			
			stmt.setString(1, vo.getNombre());
			stmt.setString(2, vo.getDescripcion());
			stmt.setString(3, vo.getMaterial());
			stmt.setString(4, vo.getImagen());
			stmt.setDouble(5, vo.getCostopersona());
			stmt.setDouble(6, vo.getIdjuego());
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

	public void eliminar(int idjuego) throws DAOExcepcion {
		String query = "update juego set estado = 0 where idjuego=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idjuego);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}
				
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	
	public Juego buscarPorNombre(String nombre)
			throws DAOExcepcion {
		String query = "select idjuego, nombre, descripcion, materiales, imagen, costopersona, estado from juego where nombre = ?";
		Collection<Juego> lista = new ArrayList<Juego>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, "%" + nombre + "%");
			rs = stmt.executeQuery();
			
			//System.out.println(nombre);
			while (rs.next()) {
				Juego vo = new Juego();
				
				vo.setIdjuego(rs.getInt("idjuego"));
				vo.setNombre(rs.getString("nombre"));
				vo.setDescripcion(rs.getString("descripcion"));
				vo.setMaterial(rs.getString("materiales"));
				vo.setImagen(rs.getString("imagen"));
				vo.setCostopersona(rs.getFloat("costopersona"));
				vo.setEstado(rs.getString("estado"));
				
				lista.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		System.out.println("juegoDAO.. "+lista.size());
		
		Juego vo = new Juego();
		if(lista.size()>0)
		{
			for (Juego juego : lista) {
				vo = juego;
				break;
			}
			return vo;
		}else{
			return null;
		}
		
		
	}
	
	public Juego obtenerPorIdCategoria(int idJuego)
			throws DAOExcepcion {
		String query = "select idjuego, nombre, descripcion, materiales, imagen, costopersona, estado from juego where idjuego = ?";
		Collection<Juego> lista = new ArrayList<Juego>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		Juego vo = new Juego();
		
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idJuego);
			rs = stmt.executeQuery();
			
			//System.out.println(nombre);
			while (rs.next()) {
				
				vo.setIdjuego(rs.getInt("idjuego"));
				vo.setNombre(rs.getString("nombre"));
				vo.setDescripcion(rs.getString("descripcion"));
				vo.setMaterial(rs.getString("materiales"));
				vo.setImagen(rs.getString("imagen"));
				vo.setCostopersona(rs.getFloat("costopersona"));
				vo.setEstado(rs.getString("estado"));
				
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}		
		
		return vo;
		
	}
}
